package br.com.affero.testewel.model.document;

/**
 * Enumerado de Content-Type conhecidos do sistema.
 * 
 * @author Welington Veiga
 * @since 19/12/2011
 * @version 1.0.0
 *
 */
public enum ContentTypeEnum {
	APPLICATION_PDF("application/pdf"),
	IMAGE_JPEG("image/jpeg"),
	IMAGE_PNG("image/png"),
	IMAGE_GIF("image/gif"),
	TEXT_PLAIN("text/plain"),
	TEXT_XML("text/xml"),
	UNKNOWN_TYPE(null);
	
	private final String contentType;
	
	private ContentTypeEnum(String contentType){
		this.contentType = contentType;
	}
	
	/**
	 * Método que retorna um Content-Type segundo uma String.
	 * 
	 * @see http://www.iana.org/assignments/media-types/index.html
	 * 
	 * @param contentType String que identifica um content-type
	 * @return um ContentTypeEnum caso seja um tipo conhecido, ou um UNKNOWN_TYPE caso contrário.
	 */
	public static ContentTypeEnum fromString(String contentType){
		ContentTypeEnum cType = null;
		
		// Tipos 'conhecidos'
		ContentTypeEnum[] cTypes = {APPLICATION_PDF, IMAGE_JPEG,
				IMAGE_GIF, IMAGE_PNG, TEXT_PLAIN, TEXT_XML};
		
		// Verificando se o tipo recebido corresponde a algum deles
		if(contentType != null)
			for(ContentTypeEnum type : cTypes)
				if(type.getContentType().equals(contentType)){
					cType = type;
					break;
				}
		
		if(cType == null)
			cType = UNKNOWN_TYPE;
		
		return cType;
	}
	
	public String getContentType(){
		return contentType;
	}
}
